home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- * "simnu.h"
- *-------------------------------------------------------------------------
- * Menu library
- * Copyright (c) 1993, TaroPYON
- *************************************************************************/
-
- #ifndef _SIMNU_H
- #define _SIMNU_H
-
- #include <setjmp.h>
-
- #ifndef _SIEV_H
- # include <siev.h>
- #endif
- #ifndef _SIDLG_H
- # include <sidlg.h>
- #endif
- #ifndef _SIFTS_H
- # include <sifts.h>
- #endif
-
- /* "mnu010.c" ----------------------------------------------------*/
-
- typedef struct _mnudat_t
- {
- struct _mnudat_t *next;
-
- unsigned int att; /* 属性 */
- unsigned int stt; /* ステータス */
-
- int skey; /* ショートカットキー */
- FTSDAT_T *fts; /* フォント */
- char *msg; /* メッセージ */
- int xsMsg, ysMsg; /* メッセージの大きさ */
- FRAME_T fr; /* 表示フレーム */
-
- void *mnuChild; /* サブメニュー用 */
- void *mnu; /* 項目が属するメニュー */
-
- int evNo;
- int (*func)(int, struct _mnudat_t *);
- void *ptr;
- } MNUDAT_T;
-
- #define MNUDAT_ATT_OFF (0x0001_0000) /* 選択禁止 */
- #define MNUDAT_ATT_NORET (0x0002_0000) /* 実行してもメニューを抜けない */
- #define MNUDAT_ATT_DSPON (0x0004_0000) /* 実行中もメニューを表示 */
- #define MNUDAT_ATT_CHILD (0x1000_0000) /* サブメニュー */
- #define MNUDAT_ATT_CLOSECHILD (0x2000_0000) /* サブメニューも自動クローズ */
-
- typedef struct _mnu_t
- {
- struct _mnu_t *next, *prev;
- struct _mnu_t *mnuCrt; /* カレントメニュー */
- struct _mnu_t *mnuTop; /* 接続されているメニュー */
- struct _mnu_t *mnuLast; /* 最後に開いてるメニュー */
-
- unsigned int att; /* 属性 */
- unsigned int stt; /* ステータス */
- DLG_T *dlg; /* ダイアログ */
- EV_T *ev; /* イベント */
- jmp_buf jmpbuf;
- int (*exitChk)(struct _mnu_t *,EVQUE_T *);
- /* 終了チェック用関数 */
- void *exitPtr; /* 終了イベント用ワーク */
-
- char *title; /* タイトル */
- FTSDAT_T *ftsTtl; /* タイトルフォント */
-
- FRAME_T frMnu; /* メニュー枠 */
- FTSDAT_T *ftsMnu; /* メニュー表示フォント */
- int selPos; /* 選択カーソル位置 */
- int datNum; /* データ数 */
- MNUDAT_T *datCrt;
- MNUDAT_T *datTop;
- MNUDAT_T *datLast;
- EV_T *evDat; /* 選択用イベント */
-
- FTSDAT_T *ftsMsg; /* メッセージ用フォント */
- COLOR_T *colTbl; /* カラーテーブル */
- } MNU_T;
-
- extern MNU_T *MNU_open(void);
- extern int MNU_setTitle( MNU_T *mnu, FTSDAT_T *fts, CONST char *form, ... );
- extern int MNU_datAppend( MNU_T *mnu, MNUDAT_T *para, CONST char *form, ... );
- extern int MNU_datAdd( MNU_T *mnu, MNUDAT_T *para, size_t sizpara, CONST char *msg );
- extern void MNU_datClear( MNU_T *mnu );
- extern int MNU_datChange( MNU_T *mnu, int mnuNo, UINT att, CONST char *form, ... );
- extern int MNU_setSize( MNU_T *mnu, int xs, int ys );
- extern int MNU_start( MNU_T *mnu );
- extern void MNU_close( MNU_T *mnu );
-
- /* メニュー設定用パラメータの設定 */
- #define MNU_DATSET(_para,_att,_skey,_fts,_evNo,_func,_ptr) \
- { _para.att = (_att); \
- _para.skey = (_skey); \
- _para.fts = (_fts); \
- _para.mnuChild = NULL; \
- _para.evNo = (_evNo); \
- _para.func = (int (*)(int,MNUDAT_T *))(_func); \
- _para.ptr = (_ptr); \
- }
-
- /* 通常メニューの追加 */
- #define MNU_DATAPPENT(_mnu,_att,_skey,_fts,_evNo,_func,_ptr,_msg) \
- { MNUDAT_T _para; \
- MNU_DATSET(_para,_att,_skey,_fts,_evNo,_func,_ptr) \
- MNU_datAppend( (_mnu), &_para, "%s", (_msg) ); \
- }
-
- /* サブメニュー設定用パラメータの設定 */
- #define MNU_MNUSET(_para,_att,_skey,_fts,_mnuChild) \
- { _para.att = (_att)|MNUDAT_ATT_CHILD; \
- _para.skey = (_skey); \
- _para.fts = (_fts); \
- _para.mnuChild = (_mnuChild); \
- }
-
- /* サブメニューの追加 */
- #define MNU_MNUAPPENT(_mnu,_att,_skey,_fts,_mnuChild,_msg) \
- { MNUDAT_T _para; \
- MNU_MNUSET(_para,_att,_skey,_fts,_mnuChild); \
- MNU_datAppend( (_mnu), &_para, "%s", (_msg) ); \
- }
-
- #define MNU_BLKAPPENT(_mnu,_att,_stt) \
- { MNUDAT_T _para; \
- _para.att = (_att); \
- _para.stt = (_stt); \
- MNU_datAppend( (_mnu), &_para, NULL ); \
- }
-
- /* "mnu020.c" ----------------------------------------------------*/
- /* メニューバー */
- /*----------------------------------------------------------------------*/
-
- typedef struct _mbardat_t
- {
- struct _mbardat_t *next;
- unsigned int att; /* 属性 */
- unsigned int stt; /* ステータス */
- int xs;
- FRAME_T fr; /* 表示位置 */
- UINT ch, ec; /* キー */
- MNU_T *mnu; /* メニュー */
-
- FTSDAT_T *fts; /* フォント */
- int xsMsg, ysMsg;
- char *msg; /* メッセージ */
- COLOR_T cstr; /* 文字色 */
- COLOR_T cbtn; /* ボタン色 */
- COLOR_T chil, csha; /* ハイライト,シャドー */
-
- void *mbar;
- } MBARDAT_T;
-
- typedef struct
- {
- int x0, y0; /* 表示開始位置 */
- int ys; /* 縦の大きさ */
- WIN_T *win; /* ウィンドゥ */
- EV_T *ev; /* イベント */
- jmp_buf jmpbuf;
-
- FTSDAT_T *fts; /* フォント */
- int mbNum; /* メニューの数 */
- MBARDAT_T *mbCrt; /* カレント */
- MBARDAT_T *mbTop;
- } MBAR_T;
-
- #define MBAR_ATT_DSPMARK (0x0000_0001) /* [▼]マークの表示 */
-
- extern MBAR_T *MBAR_open( WIN_T *win );
- extern void MBAR_close( MBAR_T *mbar );
- extern int MBAR_setDat( MBAR_T *mbar, MBARDAT_T *para, CONST char *form, ... );
- extern int MBAR_evset( MBAR_T *mbar, EV_T *evBas );
- extern int MBAR_dsp( MBAR_T *mbar, int x0, int y0 );
-
- #define MBAR_SETDAT(_mbar,_att,_ch,_ec,_mnu,_fts,_xs,_cstr,_cbtn,_chil,_csha,_msg) \
- { MBARDAT_T _para; \
- _para.att = (_att); \
- _para.ch = (_ch); \
- _para.ec = (_ec); \
- _para.mnu = (_mnu); \
- _para.fts = (_fts); \
- _para.xs = (_xs); \
- _para.cstr = (_cstr); \
- _para.cbtn = (_cbtn); \
- _para.chil = (_chil); \
- _para.csha = (_csha); \
- MBAR_setDat((_mbar),&_para,"%s",(_msg)); \
- }
-
- #endif
-